import Shared
import SwiftUI

struct ThreadCredentialsManagementView: View {
    @StateObject private var viewModel = ThreadCredentialsManagementViewModel()

    @State private var showDeleteConfirmation = false
    @State private var credentialPendingDelete: ThreadCredential?

    var body: some View {
        VStack {
            if viewModel.isLoading {
                ProgressView()
                    .progressViewStyle(.circular)
            } else {
                listView
            }
        }
        .navigationTitle(L10n.Thread.Management.title)
        .onAppear {
            Task.detached {
                await viewModel.loadCredentials()
            }
        }
    }

    private var listView: some View {
        List(viewModel.configs, id: \.id) { config in
            Section(config.name) {
                ForEach(config.credentials, id: \.autogeneratedId) { credential in
                    CollapsibleView(collapsedContent: {
                        Text(credential.networkName)
                            .padding(.vertical, 8)
                    }, expandedContent: {
                        ThreadCredentialDetailsView(source: config.source, credential: credential)
                            .padding(.top)
                    })
                }
                .onDelete { indexSet in
                    credentialPendingDelete = indexSet.map({ config.credentials[$0] }).first
                    showDeleteConfirmation = true
                }
            }
        }
        .environmentObject(viewModel)
        .confirmationDialog(
            L10n.SettingsDetails.Thread.DeleteCredential.Confirmation.title,
            isPresented: $showDeleteConfirmation,
            titleVisibility: .visible
        ) {
            Button(L10n.yesLabel, role: .destructive) {
                viewModel.deleteCredential(credentialPendingDelete)
                credentialPendingDelete = nil
            }
            Button(L10n.noLabel, role: .cancel) {
                credentialPendingDelete = nil
            }
        }
    }
}

#Preview {
    ThreadCredentialsManagementView()
}
